/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Interfaz;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

/**
 *
 * @author Yenko
 */
public class Pantalla extends Canvas implements Runnable
{
    private int XActual, YActual, Desplazamiento;// Posiciones relativas para pintar la imagen desde un punto determinado
                                                 // Desplazamiento en pixeles de la imagen
    Image mapa = null; //SINGLETON...
    Image mira = null;

    private int XEnLaMira, YEnLaMira;  //Valores que se muestran en pantalla del punto central en la mira
    private int movidoenX, movidoenY;  //Valores que indican el desplazamiento hecho hasta el momento

    public int getXEnLaMira() {
        return XEnLaMira;
    }

    public int getYEnLaMira() {
        return YEnLaMira;
    }

    private void RecalcularPuntoEnMira() ///hay que sincronizarlo bien 
    {
        XEnLaMira = movidoenX + this.getWidth()/2;
        YEnLaMira = movidoenY + this.getHeight()/2;
    }

    private Image getMapa()//Enviarlo a un controlador
    {
        Image imagen = null;
        try
        {
           imagen = Image.createImage("/mapaun.jpg");
        }
        catch (Exception e)
        {
           System.err.println("error: " + e);
           System.out.println("No se pudo cargar la Imagen del mapa.");
        }
      return imagen;
    }//

    private Image getMira()//Enviarlo a un controlador
    {
        Image imagen = null;
        try
        {
           imagen = Image.createImage("/mira12.png");
        }
        catch (Exception e)
        {
           System.err.println("error: " + e);
           System.out.println("No se pudo cargar la Imagen de la mira.");
        }
      return imagen;
    }//

    Pantalla()
    {
        XActual = YActual = 0;
        movidoenX = movidoenY = 0;
        Desplazamiento = 25; //Cantidad de pixeles
        XEnLaMira = XActual + this.getWidth()/2;
        YEnLaMira = YActual + this.getHeight()/2;

        // Cargar y mostrar gráfico

        mapa = this.getMapa(); ///Lo podemos mandar a un controlador
        mira = this.getMira();

    }//f Pantalla

    private void MoverXIzquierda()
    {
        //if ( XActual+Desplazamiento > img.getWidth() )
          //  return;
        XActual += Desplazamiento;
        movidoenX -= Desplazamiento;
    }

    private void MoverXDerecha()
    {
        //if ( XActual-Desplazamiento < 0 )
          //  return;
        XActual -= Desplazamiento;
        movidoenX += Desplazamiento;
    }
    
    private void MoverYArriba()
    {
        //if ( YActual+Desplazamiento > img.getHeight() )
          //  return;
        YActual += Desplazamiento;
        movidoenY -= Desplazamiento;
    }

    private void MoverYAbajo()
    {
        //if ( YActual-Desplazamiento < 0 )
          //  return;
        YActual -= Desplazamiento;
        movidoenY += Desplazamiento;
    }

    public void paint(Graphics g)
    {
      // Borrar la pantalla
      g.setColor(200,200,200); //fondo de pantalla
      g.fillRect (0, 0, getWidth(), getHeight());

      // 0 0 son las posicion inicial en X y en Y de la imagen. ... TOP,LEFT, corresponde a la posicion en la pantalla
      g.drawImage (mapa, XActual, YActual, Graphics.TOP|Graphics.LEFT);
      g.drawImage (mira, this.getWidth()/2 - mira.getWidth()/2, this.getHeight()/2 - mira.getHeight()/2, Graphics.TOP|Graphics.LEFT); //TOCA QUITARLE EL FONDO
      RecalcularPuntoEnMira(); //Tambie podria ser un control

      g.setColor(255,0,0);
      g.drawString("X: "+XEnLaMira, 0, 0, Graphics.TOP|Graphics.LEFT );
      g.drawString("Y: "+YEnLaMira, 0, 20, Graphics.TOP|Graphics.LEFT );

      //ESTO SE PUEDE QUITAR... SOLO ES CARACTER INFORMATIVO
      //System.out.println(" X : "+XEnLaMira);
      //System.out.println(" Y : "+YEnLaMira);
    }//f paint

    
    public void run()
    {/*
        while ( true )
        {

            try
            {
                Thread.sleep(30); //OJO CON ESTO
            }
            catch( InterruptedException e )
            {
                System.out.println( e.toString() );
            }
        }*/
    }

    public void keyPressed(int keyCode)
    {
      int action = getGameAction(keyCode);

      //System.out.println("KeyCode ::: " + keyCode );
      //System.out.println("action  ::: " + action );

      switch (keyCode)
      {
         case 50: UP:
            //System.out.println("Se presiono 2");
            this.MoverYArriba();
         break;

         case 52: LEFT:
            //System.out.println("Se presiono 4");
            this.MoverXIzquierda();
         break;

          case 54: RIGHT:
             //System.out.println("Se presiono 6");
             this.MoverXDerecha();
         break;

         case 56: DOWN:
             //System.out.println("Se presiono 8");
            this.MoverYAbajo();
         break;

         case 53: FIRE: //Acccion de seleccion de punto
             //display.setCurrent( casoDeUso.MostrarInformacion( screen.getXEnLaMira(), screen.getYEnLaMira() ) );
             System.out.println("Se presiono 5");
         break;
      }
     repaint();
    }//f run


}//f pantalla
